# -*- coding: utf-8 -*-
"""
Created on Mon May 19 20:26:38 2025

@author: 何敏
"""
# 导入相关库
import pandas as pd
from linearmodels.panel import PanelOLS
from linearmodels.panel import compare

# 假设你的数据已经整理成一个标准的 Pandas DataFrame，格式如下：
# 数据包括以下列：省份（Province）、年份（Year）、智能制造水平（SmartManufacturingLevel）、
# 区域经济发展（RegionalEconomicDevelopment）、平均受教育年限（AverageEducationYears）、
# 固定资产投资总额（FixedAssetInvestment）、一般预算支出比GDP（BudgetToGDPRatio）、城镇化（Urbanization）。

# 假设你的数据保存在名为 `df` 的 DataFrame 中，示例如下：
df = pd.read_csv("C:\\Users\何敏\Desktop\data3.csv")

# 数据预处理：确保面板数据结构的正确性
# 将“省份”和“年份”设置为多重索引，以符合面板数据格式
df = df.set_index(['Province', 'Year'])

# 动态面板模型需要滞后项，生成被解释变量（区域经济发展）的滞后项
df['RegionalEconomicDevelopment_Lag'] = df.groupby(level="Province")['RegionalEconomicDevelopment'].shift(1)

# 丢弃滞后项生成后导致的 NaN 数据
df = df.dropna()

# 定义被解释变量（Y）和解释变量（X）
y = df['RegionalEconomicDevelopment']
X_full = df[['RegionalEconomicDevelopment_Lag', 'SmartManufacturingLevel', 'AverageEducationYears',
             'FixedAssetInvestment', 'BudgetToGDPRatio', 'Urbanization']]
X_partial = df[['RegionalEconomicDevelopment_Lag', 'SmartManufacturingLevel']]  # 仅滞后项和核心解释变量

# **模型1：加入控制变量并控制固定效应**
model_full_fixed = PanelOLS(y, X_full, entity_effects=True)  # 控制固定效应
result_full_fixed = model_full_fixed.fit(cov_type='clustered', cluster_entity=True)

# **模型2：仅控制固定效应，不加入控制变量**
model_partial_fixed = PanelOLS(y, X_partial, entity_effects=True)  # 控制固定效应
result_partial_fixed = model_partial_fixed.fit(cov_type='clustered', cluster_entity=True)

# **模型3：不加入控制变量，也不控制固定效应**
model_no_fixed = PanelOLS(y, X_partial, entity_effects=False)  # 不控制固定效应
result_no_fixed = model_no_fixed.fit(cov_type='unadjusted')

# **对三个模型的结果进行比较**
results = compare({
    "加入控制变量并控制固定效应": result_full_fixed,
    "仅控制固定效应": result_partial_fixed,
    "不控制固定效应": result_no_fixed
})

# 打印模型比较结果
print(results)

# 分别打印每个模型的详细回归结果
print("\n模型1（加入控制变量并控制固定效应）结果：")
print(result_full_fixed)

print("\n模型2（仅控制固定效应）结果：")
print(result_partial_fixed)

print("\n模型3（不控制固定效应）结果：")
print(result_no_fixed)